//
//  NSDate+Extension.swift
//  微博Swift
//
//  Created by  justinchou on 16/3/1.
//  Copyright © 2016年  justinchou. All rights reserved.
//

import UIKit

// MARK: - 日期相关常量对象
// 为何用常量？由于date和calendar的创建和销毁非常耗性能，因此可用单例，一次性全部做完之后再销毁
/// 日期格式化对象
private let justin_sharedDataFormatter = NSDateFormatter()
/// 当前日历
private let justin_sharedCalendar = NSCalendar.currentCalendar()

extension NSDate {
    
    /// 使用新浪格式的字符串创建日期
    ///
    /// - parameter create_at: EEE MMM dd HH:mm:ss zzz yyyy
    ///
    /// - returns: NSDate
    class func justin_sinaDate(create_at: String?) -> NSDate? {
        
        justin_sharedDataFormatter.dateFormat = "EEE MMM dd HH:mm:ss zzz yyyy"
        //若不设置区域 ，模拟器可以显示 但是真机会出错
        justin_sharedDataFormatter.locale = NSLocale(localeIdentifier: "en")
        
        return justin_sharedDataFormatter.dateFromString(create_at ?? "")
    }
    
    
    /** 日期描述格式字符串
     
     * 刚刚(一分钟内)
     * X分钟前(一小时内)
     * X小时前(当天)
     * 昨天 HH:mm(昨天)
     * MM-dd HH:mm(一年内)
     * yyyy-MM-dd HH:mm(更早期)
     */
    var justin_dateDescription: String {
        
        //1.是否为今天
        if justin_sharedCalendar.isDateInToday(self) {
            
            //计算时间差来判断显示什么内容
            let timeDelta = Int(NSDate().timeIntervalSinceDate(self))

            if timeDelta < 60 {
                return "刚刚"
            }
            
            if timeDelta < 3600 {
                return "\(timeDelta/60) 分钟前"
            }
            
            return "\(timeDelta/3600) 小时前"
        }
        
        
        //2. 非当天
        var fmt = "HH:mm"
        //如果是昨天
        if justin_sharedCalendar.isDateInYesterday(self) {
            fmt = "昨天" + fmt
        } else {
            
            fmt = "MM-dd" + fmt
            
            let thisYear = justin_sharedCalendar.components(.Year, fromDate: NSDate()).year
            let year = justin_sharedCalendar.components(.Year, fromDate: self).year
            
            if year != thisYear {
                fmt = "yyyy-" + fmt
            }
        }
        
        justin_sharedDataFormatter.dateFormat = fmt
        justin_sharedDataFormatter.locale = NSLocale(localeIdentifier: "en")
        
        return justin_sharedDataFormatter.stringFromDate(self)
    }
}
